from django.contrib import admin

from TestModel.models import Test, Contact, Tag

"""
为了让 admin 界面管理某个数据模型，我们需要先注册该数据模型到 admin。
"""


class TagInline(admin.TabularInline):
    model = Tag


class ContactAdmin(admin.ModelAdmin):

    # 内联(Inline)显示
    # Contact 与 Tag 有外部参考关系。
    # 在默认的页面显示中，将两者分离开来，无法体现出两者的从属关系。
    # 可以使用内联显示，让 Tag 附加在 Contact 的编辑页面上显示。
    inlines = [TagInline]

    list_display = ('name', 'age', 'email')  # 自定义列表展示list
    search_fields = ('name',)  # 为列表增加搜索栏

    # 自定义管理页面，来取代默认的页面。比如 "add" 页面,只显示 name 和 email 部分
    # fields = ('name', 'email')

    # 将字段分成Main和Advance两块，每块可以定义自己的格式
    fieldsets = (
        ['Main', {
            'fields': ('name', 'email'),
        }],
        ['Advance', {
            'classes': ('collapse',),  # Advance 部分的 CSS 样式，此处为部分隐藏
            'fields': ('age',),
        }]
    )


# Register your models here.
# admin.site.register(Test)  # 注册一个模型并显示

# 由于类 ContactAdmin 对应的是 Contact 数据模型，我们在注册的时候，需要将它们一起注册
admin.site.register(Contact, ContactAdmin)

admin.site.register([Test, Tag])  # 注册多个模型并显示，同一个模型不能重复注册
